Dans le monde des réseaux, il existe des protocoles qui se distinguent par leur efficacité et leur capacité à faire des merveilles ensemble. Aujourd'hui, j'aimerai discuter d'un combo légendaire MPLS (Multiprotocol Label Switching) et OSPF (Open Shortest Path First). Ces deux technologies sont souvent utilisées dans les réseaux d'entreprise et les fournisseurs de services Internet pour garantir une transmission rapide et efficace des données.
MPLS, avec sa capacité à rediriger les paquets via des labels plutôt que des adresses IP, optimise le routage en réduisant la complexité des tables de routage. OSPF, de son côté, s’assure que chaque routeur dispose de la vision la plus précise du réseau. Mais que se passe-t-il lorsque ces deux protocoles collaborent ? Le résultat est une symbiose parfaite, où chaque paquet est acheminé avec une efficacité chirurgicale. Euh... Si si si, je parle bien de MPLS et de OSPF 😅. Et ceci n'est pas un débat, je ne dis pas que le duo est mieux qu'un autre, au contraire, je parle toujours en terme de besoins et de cas de figure.
De quoi parlons-nous exactement ?
Pour comprendre pleinement MPLS et OSPF, il est essentiel de connaître les documents qui les introduisent, les RFCs (Request for Comments), qui servent de référence pour ces technologies.
- La RFC 3031 - "Multiprotocol Label Switching Architecture" définit l'architecture de MPLS, comment permettre aux routeurs d'utiliser des labels courts au lieu des adresses IP pour diriger les paquets. Cette méthode réduit la complexité et accélère le processus de routage.
- RFC 3032 - "MPLS Label Stack Encoding" : Ici, nous entrons dans le vif du sujet avec la définition du format des labels MPLS. Cette norme précise comment les labels sont empilés sur les paquets IP, permettant un routage flexible et hiérarchique.
- RFC 2328 - "OSPF Version 2" : La RFC qui codifie OSPF v2, protocole de routage intra-domaine (IGP) basé sur l'algorithme de Dijkstra. Il assure que tous les routeurs dans un même domaine ont une vision cohérente du réseau, en calculant les chemins les plus courts vers chaque destination.
Ces RFCs, assez techniques, sont la base sur laquelle repose la magie du combo MPLS/OSPF. Elles nous montrent comment combiner l'efficacité des labels MPLS avec la robustesse du calcul de routes OSPF pour créer un réseau à la fois rapide et résilient. Je vous invite à y jeter un coup d'oeil (ou deux 😅).
OSPF (Open Shortest Path First) ?
Accrochez-vous, ça risque d'aller très vite...🥱
OSPF est un protocole de routage dynamique, intra-domaine (IGP), basé sur l'algorithme de Dijkstra. Il fonctionne en divisant un réseau en aires hiérarchiques (ou aeras), avec une area 0
(généralement : backbone
) servant de cœur. Chaque routeur OSPF maintient une table de routage en utilisant des LSAs (Link State Advertisements) pour échanger des informations d'état de lien avec les autres routeurs. Les LSAs sont regroupés dans une LSDB (Link State Database), assurant une vision cohérente du réseau pour tous les routeurs dans une même zone.
Le plus court chemin est déterminé pour aller d'un point à un autre, en construisant une SPT (Shortest Path Tree). OSPF supporte des masques de sous-réseau variables (VLSM) et permet une agrégation des routes via une summarization pour réduire la taille des tables de routage. Il utilise une métrique basée sur le coût (cost), généralement déterminée par la bande passante des liaisons. OSPF est classé comme un protocole à états de liens (link-state) et assure une convergence rapide avec une faible charge réseau grâce au protocole hello pour détecter les voisins. Il supporte également les authentifications MD5 ou SHA pour sécuriser les échanges de routage.
Dans OSPF, il y'a la notion de DR - Designated Router , il agit comme un point central pour l'échange de routes avec tous les autres routeurs, réduisant ainsi les échanges redondants. Son élection se fait automatiquement via un processus basé sur deux critères : la priorité OSPF
et l'ID du routeur
. Chaque routeur envoie des paquets Hello avec ces informations. Celui avec la priorité la plus élevée devient DR ; en cas d'égalité, l'ID du routeur (adresse IP la plus élevée) départage. Si un DR échoue, le Backup Designated Router (BDR) prend sa place. Les autres routeurs se connectent au DR et BDR pour échanger leurs informations de routage.
Multi Protocol Label Switching - MPLS
MPLS (Multiprotocol Label Switching) est une technologie de commutation de paquets qui utilise des labels pour acheminer le trafic réseau, au lieu de baser le routage uniquement sur les adresses IP. Une topologie MPLS se compose de : routeurs de coeur (P-Routers), routeurs de bordure (PE-Routers) . Les routeurs de bordure (PE Routers) connectent les clients au backbone MPLS et assignent des labels aux paquets en fonction des routes apprises via des protocoles comme BGP ou OSPF. Les P Routers ne connaissent pas les routes finales des paquets, mais se contentent de les commuter selon leurs labels.
Chaque flux de données reçoit un label unique, permettant un acheminement rapide à travers le réseau. Le FEC (Forwarding Equivalence Class) groupe les paquets ayant des caractéristiques similaires, afin qu'ils partagent un même chemin. On parle maintenant de LSPs (Label Switched Paths) qui définissent les chemins à travers le réseau MPLS, optimisant ainsi le routage.
En somme, MPLS accélère le transport des données et permet une gestion efficace des services comme les VPNs, tout en offrant flexibilité et isolation des flux.
🔧 Implémentation du MPLS/OSPF sous RouterOS (MikroTik)
Sur MikroTik, la configuration de MPLS et OSPF est relativement simple mais nécessite une bonne compréhension des concepts. Nous allons passer en revue les étapes pour mettre en place un réseau de base avec le scénario qui suit .
Nous avons un fournisseur de services Internet (ISP) nommé MANSA qui doit fournir un accès Internet sécurisé et performant à deux de ses clients : Client X1 et Client X2. Ces clients sont des entreprises situées dans deux villes différentes, Client X1 étant basé à Bamako et Client X2 à Koulikoro.
L'infrastructure est composée de plusieurs Points de Présence (PoP) à travers le pays, reliés par un backbone MPLS robuste. Pour ce cas précis, nous utilisons :
- POP1 à Bamako, point d'entrée du client dans le réseau pour le client X1.
- POP2 à Koulikoro, point d'entrée du client X2.
Topologie du Réseau
P-PoPX
etP-PoPY
sont les routeurs de cœur du backbone, il peut y avoir plusieurs autres routeurs de coeur intermédiaires (cela ne change rien au concept 🙃).PE-PoPX
etPE-PoPX
sont les routeurs PE, connectant les réseaux clients au backbone MPLS, et gèrent les routes OSPF ainsi que la propagation des labels MPLS pour le trafic client.CE-X1
etCE-X2
sont les routeurs clients, connectés respectivement aux deux PoPs via une liaison (fibre ou radio).
Le défi ici est d'assurer que X1 et X2 bénéficient d'un accès Internet fiable et sécurisé, tout en garantissant la performance et la qualité de service 🥱.
Les routeurs CE sont configurés dans une Area dite Stub (Area 1 & Area 2) pour limiter la complexité de leur table de routage et améliorer les performances. Cette zone ne propagera que les routes internes OSPF, tandis que les PE fourniront une route par défaut pour tout autre trafic (vers Internet).
1. Configuration OSPF sous Mikrotik :
La configuration est rélativement simple, voyons les étapes clés 🥱:
- Ajout d'une interface virtuelle
loopback
et y attribuer une IP spécifique, qui sera utilisée commeRouter-ID
dans OSPF. - Configuration des adresses IP sur chaque interface.
- Et finalement la configuration OSPF (Instance, Area, Interfaces)
# P-A
[admin@P-Mikrotik] > system identity set name=P-A
[admin@P-A] > interface bridge add name=loopback
[admin@P-A] > ip address add address=1.1.1.1/32 interface=loopback
[admin@P-A] > ip address add address=192.168.1.1/30 interface=ether1
[admin@P-A] > ip address add address=192.168.1.5/30 interface=ether2
[admin@P-A] > routing ospf instance add name=default redistribute=connected router-id=1.1.1.1
[admin@P-A] > routing ospf/area/add name=backbone type=default area-id=0.0.0.0 instance=default
[admin@P-A] > routing ospf interface-template add interfaces=ether1 type=ptp area backbone networks=192.168.1.0/30 auth=md5 auth-key=pa2pb
[admin@P-A] > routing ospf interface-template add interfaces=ether2 type=ptp area backbone networks=192.168.1.4/30 auth=md5 auth-key=pa2pea
[admin@P-A] > routing ospf interface-template add interfaces=loopback area backbone networks=1.1.1.1/32 passive
# P-B
[admin@MikroTik] > system identity set name=P-B
[admin@P-B] > interface bridge add name=loopback
[admin@P-B] > ip address add address=2.2.2.1/32 interface=loopback
[admin@P-B] > ip address add address=192.168.1.2/30 interface=ether1
[admin@P-B] > ip address add address=192.168.1.9/30 interface=ether2
[admin@P-B] > routing ospf instance add name=default redistribute=connected router-id=2.2.2.1
[admin@P-B] > routing ospf area/add name=backbone type=default area-id=0.0.0.0 instance=default
[admin@P-B] > routing ospf interface-template add interfaces=ether1 type=ptp area=backbone networks=192.168.1.2/30 auth=md5 auth-key=pa2pb
[admin@P-B] > routing ospf interface-template add interfaces=ether2 type=ptp area=backbone networks=192.168.1.9/30 auth=md5 auth-key=pb2peb
[admin@P-B] > routing ospf interface-template add interfaces=loopback area=backbone networks=2.2.2.1/32 passive
# PE-A
[admin@MikroTik] > system identity set name=PE-A
[admin@PE-A] > interface bridge add name=loopback
[admin@PE-A] > ip address add address=192.168.1.6/30 interface=ether1
[admin@PE-A] > routing ospf instance add name=default redistribute=connected router-id=1.1.1.2
[admin@PE-A] > routing ospf area add name=backbone type=default area-id=0.0.0.0 instance=default
[admin@PE-A] > routing ospf interface-template add interfaces=ether1 type=ptp area=backbone networks=192.168.1.6/30 auth=md5 auth-key=pa2pea
[admin@PE-A] > ip address add address=1.1.1.2/32 interface=loopback
[admin@PE-A] > routing ospf interface-template add interfaces=loopback networks=1.1.1.2/32 area=backbone passive
# PE-B
[admin@MikroTik] > system identity set name=PE-B
[admin@PE-B] > interface bridge add name=loopback
[admin@PE-B] > ip address add address=192.168.1.10/30 interface=ether1
[admin@PE-B] > ip address add address=2.2.2.2/32 interface=loopback
[admin@PE-B] > routing ospf instance add name=default redistribute=connected router-id=2.2.2.2
[admin@PE-B] > routing ospf area add name=backbone type=default area-id=0.0.0.0 instance=default
[admin@PE-B] > routing ospf interface-template add interfaces=ether1 type=ptp area=backbone networks=192.168.1.10/30 auth=md5 auth-key=pb2peb
[admin@PE-B] > routing ospf interface-template add interfaces=loopback networks=2.2.2.2/32 passive area=backbone
A ce stade, le réseau OSPF est déjà fonctionnel, la commande ip route print
sur P-A, P-B, PE-A ou PE-B devrait afficher ce qui suit :
[admin@PE-A] > ip route print
Flags: D - DYNAMIC; A - ACTIVE; c, o, y - COPY
Columns: DST-ADDRESS, GATEWAY, DISTANCE
DST-ADDRESS GATEWAY DISTANCE
DAo 1.1.1.1/32 192.168.1.5%ether1 110
DAc 1.1.1.2/32 loopback 0
DAo 2.2.2.1/32 192.168.1.5%ether1 110
DAo 2.2.2.2/32 192.168.1.5%ether1 110
DAo 192.168.1.0/30 192.168.1.5%ether1 110
DAc 192.168.1.4/30 ether1 0
DAo 192.168.1.8/30 192.168.1.5%ether1 110
[admin@PE-A] >
# CE-B
La configuration côté client est un peu différente de ce que nous avons vu avant, l'area ospf est de type stub (ou totally stub dans ce cas précis 🙃), les routes connues sur le backbone ne seront donc plus visibles chez le client.
[admin@Mikrotik] > system identity set name=CE-B
[admin@CE-B] > interface bridge add name=loopback
[admin@CE-B] > ip address add address=2.2.2.3/32 interface=loopback
[admin@CE-B] > ip address add address=192.168.1.18/30 interface=ether1
[admin@CE-B] > routing ospf instance add name=default router-id=2.2.2.3 redistribute=connected
[admin@CE-B] > routing ospf area add name=areaCEB type=stub instance=default area-id=2.2.2.3
[admin@CE-B] > routing ospf interface-template add interfaces=ether1 networks=192.168.1.16/30 type=ptp auth=md5 auth-key=peb2ceb area=areaCEB
[admin@CE-B] > routing ospf interface-template add interfaces=loopback networks=2.2.2.3/32 passive area=areaCEB
#CE-A
[admin@MikroTik] > system identity set name=CE-A
[admin@CE-A] > interface bridge add name=loopback
[admin@CE-A] > ip address add address=1.1.1.3 interface=loopback
[admin@CE-A] > ip address add address=192.168.1.14/30 interface=ether1
[admin@CE-A] > routing ospf instance add name=default router-id=1.1.1.3 redistribute=connected
[admin@CE-A] > routing ospf area add name=areaCEA type=stub no-summaries area-id=1.1.1.3 instance=default
[admin@CE-A] > routing ospf interface-template add interfaces=ether1 networks=192.168.1.12/30 type=ptp auth=md5 auth-key=pea2cea area=areaCEA
[admin@CE-A] > routing ospf interface-template add interfaces=loopback networks=1.1.1.3/32 passive area=areaCEA
Quelques configurations sont nécessaires sur les différents routeurs PEs, pour que les sessions OSPF montent avec les CEs :
# PE-A (Suite)
[admin@PE-A] > ip address add address=192.168.1.13/30 interface=ether2
[admin@PE-A] > routing ospf area add name=areaCEA type=stub area-id=1.1.1.3 no-summaries instance=default
[admin@PE-A] > routing ospf interface-template add interfaces=ether2 type=ptp area=areaCEA networks=192.168.1.13/30 auth=md5 auth-key=pea2cea
# PE-B (Suite)
[admin@PE-B] > ip address add address=192.168.1.17/30 interface=ether2
[admin@PE-B] > routing ospf area add name=areaCEB type=stub area-id=2.2.2.3 no-summaries instance=default
[admin@PE-B] > routing ospf interface-template add interfaces=ether2 type=ptp area=areaCEB networks=192.168.1.18/30 auth=md5 auth-key=peb2ceb
[admin@PE-B] >
Maintenant, disons que notre réseau OSPF est fonctionnel 🤗, la commande ip route print
sur un PE
ou un P
donnerait :
[admin@P-A] > ip route print
Flags: D - DYNAMIC; A - ACTIVE; c, o, y - COPY
Columns: DST-ADDRESS, GATEWAY, DISTANCE
DST-ADDRESS GATEWAY DISTANCE
DAc 1.1.1.1/32 loopback 0
DAo 1.1.1.2/32 192.168.1.6%ether2 110
DAo 1.1.1.3/32 192.168.1.6%ether2 110
DAo 2.2.2.1/32 192.168.1.2%ether1 110
DAo 2.2.2.2/32 192.168.1.2%ether1 110
DAo 2.2.2.3/32 192.168.1.2%ether1 110
DAc 192.168.1.0/30 ether1 0
DAc 192.168.1.4/30 ether2 0
DAo 192.168.1.8/30 192.168.1.2%ether1 110
DAo 192.168.1.12/30 192.168.1.6%ether2 110
DAo 192.168.1.16/30 192.168.1.2%ether1 110
[admin@P-A] >
Voyons la même commande à partir du CE-B 🤔:
[admin@CE-B] > ip route print
Flags: D - DYNAMIC; A - ACTIVE; c, y - COPY
Columns: DST-ADDRESS, GATEWAY, DISTANCE
DST-ADDRESS GATEWAY DISTANCE
DAc 2.2.2.3/32 loopback 0
DAc 192.168.1.16/30 ether1 0
[admin@CE-B] >
Je parle bien d'activation plutôt que de configuration, MPLS est très facile à mettre en place sous Mikrotik. En somme il s'agit d'activé le LDP sur les interfaces qui sont sensées y participer et le tour est joué.
# P-PoPX
/mpls ldp add enabled=yes lsr-id=1.1.1.1 transport-address=1.1.1.1
/mpls ldp interface
add interface=ether1
add interface=ether5
lsr-id
: Identifiant du Label Switch Router (LSR)interface
: Spécifie les interfaces où MPLS LDP (Label Distribution Protocol) sera activé.
Il vous faudra répéter la même chose sur l'ensemble des routeurs. Après cela, la commande suivante permet de voir la table MPLS (forwarding table)
.
/mpls forwarding-table print
C'est fini ?
MPLS et OSPF, bien qu'indépendants, forment ensemble un duo redoutable pour assurer la rapidité et la fiabilité des réseaux modernes. Que vous soyez sur MikroTik ou Cisco, la configuration peut sembler complexe, mais elle est indispensable pour toute architecture réseau avancée. En suivant les étapes décrites ici, vous aurez toutes les clés en main pour mettre en œuvre cette technologie dans vos propres réseaux.
Avec un peu de pratique, vous verrez que MPLS/OSPF n'est pas seulement une question de labels et de routes, mais une véritable aventure dans l'optimisation du routage.